![AWS再入門 Amazon EC2(Linux)編](https://devio2023-media.developers.io/wp-content/uploads/2014/05/Amazon_EC2.png)
AWS再入門 Amazon EC2(Linux)編
はじめに
当エントリはDevelopers.IOで弊社AWSチームによる『AWS サービス別 再入門アドベントカレンダー 2015』の10日目のエントリです。昨日9日目のエントリは森永の『AWS Config』でした。 このアドベントカレンダーの企画は、普段AWSサービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
本日10日目のテーマは『Amazon EC2』をLinux編(EC2全般を含む)とWindows編に分けて2本同日リリースでお伝えします。
目次
- サービスの基本的な説明
- プライベートなネットワーク環境に仮想マシンを構築可能
- マシーンイメージ(AMI)
- 選択可能なマシンスペック(インスタンスタイプ )
- 従量課金で利用可能
- ブロックストレージとして利用できるEBS
- とにかく触ってみよう
- 利用可能なLinux OS
- Amazon Linux
- その他の代表的なディストリビューション
- 初期設定に注意
- 構築の自動化
- cloud-init
- ユーザデータを利用した初期設定の自動化
- プログラム可能なインフラ環境
- あわせて読みたい
- さいごに
サービスの基本的な説明
Amazon EC2はクラウド上で簡単に仮想マシン環境を利用することができるサービスです。すぐに起動可能なマシンイメージを選択して起動することで、数分の作業で環境を構築することが可能です。 以下にAmazon EC2サービスの基本的な機能をおさらいしておきます。
プライベートなネットワーク環境に仮想マシンを構築可能
EC2を構築する上でネットワーク環境の準備が欠かせません。2013年12月4日以降に作成されたAWSアカウントにおいては、EC2-VPCのみサポートとなりました(EC2-Classicは過去のもの)ので、まずは事前にVPCについて理解しておきましょう。
マシーンイメージ(AMI)
EC2を利用する際には、起動イメージとなるAmazon Machine Images(AMI)を選択して起動します。OSインストール、基本的な初期設定済のマシンイメージを利用することで、スピーディにサーバ環境をデプロイすることができます。また、AMIはユーザが作成することもできますので、ベースとなるマシンイメージを作り込んで再利用することやシステムバックアップとしても利用することができます。
選択可能なマシンスペック(インスタンスタイプ )
CPUコア数やメモリ量はユーザが自由に調節できるわけではありません。事前に用意されたインスタンスタイプの中からマシンスペックを選定して利用することになります。歴史のあるEC2ですが、インスタンスタイプは進化(スペックアップと値下げ)を続けています。インスタンスは最新世代がよりハイスペックで割安となりますので、最新世代を利用しましょう。
初めての方にご注意いただきたいのは、インスタンスタイプによってネットワーク性能が異なるという点です。次の料金と合わせて、インスタンスタイプ比較にはシンプルで見やすいので下記ページもよく参照しています(非公式ですので自己責任で!)。
従量課金で利用可能
クラウドのメリットである、使いたい分だけ使う、不要になったらクラウド事業者が捨ててくれる、ところを最大限に活かしましょう。インスタンスタイプごとに定められた料金表に基づいて、利用した分だけ時間単位で利用することが可能です。
長期利用の場合には割引される購入オプションもありますので検討すると良いでしょう。
ブロックストレージとして利用できるEBS
Amazon Elastic Block Store(EBS)は、ブロックストレージとしてEC2からマウントして利用出来る99.999%の耐久性を備えたストレージサービスです。特性や料金の異なるストレージを最大16TBまでのディスクとして利用することが可能です。まずは汎用SSD(gp2)を必要なサイズだけ利用してみましょう。自動圧縮、差分管理で利用出来るスナップショットを利用したバックアップが取得できるのも非常に便利な点です。
とにかく触ってみよう
クラウドのメリットはリードタイム、キャパシティプランニング、初期コストなしで今すぐ試せること。とにかくまず触ってみることをお勧めします。まだEC2に触れたことが無い、という方には、下記記事が参考になるはずです。
- AWS ベーシックトレーニング-トレーニング資料(Linux)
- 資料画像が古いままですが、EC2起動までに必要な情報が整理されています
- Amazon EC2再入門 2015年7月版 | Developers.IO
- 2015年上半期のアップデートとEC2起動までの丁寧な操作手順を紹介した人気記事です
利用可能なLinux OS
用意されているAMIの中から代表的なLinuxディストリビューションを取り上げてみたいと思います。
Amazon Linux
EC2を利用するなら、まず最初にAmazon Linuxを利用することを検討しましょう。クラウド環境に最適化された安全で安定した高パフォーマンスな環境を利用することができます。
- RHELベースの使い慣れたOS環境
- AWS CLI等のAPIツールが導入済
- 継続的なセキュリティとメンテナンスアップデート
- AWSがサポートしてくれる
その他の代表的なディストリビューション
用意されたAMIから以下のようなLinuxディストリビューションを選択可能です。探しているディストリビューションが見つからない場合には、AWS MarketplaceやAMI選択画面から検索してみましょう。
- Red Hat Enterprise Linux
- AWS Marketplace - Operating Systems
- Red Hat とアマゾン ウェブ サービス | アマゾン ウェブ サービス(AWS 日本語)
- AWS and Red Hat | Red Hat Connect for Technology Partners
- CentOS
- AWS Marketplace: CentOS.org products for sale on AWS Marketplace.
- Cloud/AWS - CentOS Wiki
- Ubuntu
- AWS Marketplace: Canonical Group Limited products for sale on AWS Marketplace.
- EC2StartersGuide - Community Help Wiki
- Ubuntu Amazon EC2 AMI Finder
仮想化タイプは、準仮想化(PV)ではなく、ハードウェア仮想マシン(HVM)を利用することが現在は推奨されていますので、イメージ選択の際にご注意ください。
初期設定に注意
選択するディストリビューションによって、OSの初期設定が異なりますのでご注意ください。
- 初回接続ユーザ(ec2-user, ubuntu, centos, root等)
- NTP自動起動
- SELinux(RedHat系のみ)
- AWS APIツール(AWS CLI等)の導入有無
- ディスクパーティションやファイルシステムサイズ
- cloud-init(※詳細は後述)
その他、インスタンス起動後の初期設定として、以下の項目も確認しておくと良いでしょう。
- OSホスト名
- OSユーザのパスワードやsudo設定
- TimeZone設定(デフォルトUTC)
- Locale設定
- Firewall設定(iptables, firewalld)
- ディスクサイズ、マウント設定
- swap設定
- パッケージ導入、アップデート
- 不要サービス停止
構築作業の自動化
クラウドらしく利用する為には、環境を繰り返し再利用または置き換えできるようにしておくことが重要です。この点がオンプレミス環境での構築作業とは異なる要素になるのではないかと思います。
cloud-init
Amazon Linuxやその他の一部のAMIにはデフォルトでcloud-initが導入されています。このソフトウェアを利用して、前述のような様々な作業を自動化しています。以下はほんの一例です。
- ec2-userで初回ログインできるようにユーザ作成、SSH鍵の配置をしてくれる
- エフェメラルボリュームのマウント、ディスク自動拡張
- パッケージ管理、更新
Linux OSをAmazon EC2環境で利用する場合には、cloud-initパッケージが導入されているか否か、また、導入されている場合どのような設定(/etc/cloud配下)となっているか、を確認しておくことが非常に重要です。以下にAmazon Linuxのcloud-init設定の一部をご紹介しておきます。
$ cat /etc/cloud/cloud.cfg.d/00_defaults.cfg # ### DO NOT MODIFY THIS FILE! ### # This file will be replaced if cloud-init is upgraded. # Please put your modifications in other files under /etc/cloud/cloud.cfg.d/ # # Note that cloud-init uses flexible merge strategies for config options # http://cloudinit.readthedocs.org/en/latest/topics/merging.html # The top level settings are used as module # and system configuration. # A set of users which may be applied and/or used by various modules # when a 'default' entry is found it will reference the 'default_user' # from the distro configuration specified below users: - default ssh_pwauth: false # Example datasource config # datasource: # Ec2: # metadata_urls: [ 'blah.com' ] # timeout: 5 # (defaults to 50 seconds) # max_wait: 10 # (defaults to 120 seconds) locale_configfile: /etc/sysconfig/i18n mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2'] resize_rootfs: noblock resize_rootfs_tmp: /dev ssh_deletekeys: true ssh_genkeytypes: [ 'rsa', 'dsa', 'ecdsa' ] syslog_fix_perms: ~ # The modules that run in the 'init' stage cloud_init_modules: - migrator - rsyslog - bootcmd - write-files - write-metadata - growpart - resizefs - set-hostname - update-hostname - update-etc-hosts - resolv-conf - users-groups - ssh # The modules that run in the 'config' stage cloud_config_modules: - mounts - locale - set-passwords - yum-configure - yum-add-repo - package-update-upgrade-install - timezone - puppet - disable-ec2-metadata - runcmd # The modules that run in the 'final' stage cloud_final_modules: - scripts-per-once - scripts-per-boot - scripts-per-instance - scripts-user - ssh-authkey-fingerprints - keys-to-console - phone-home - final-message - power-state-change # System and/or distro specific settings # (not accessible to handlers/transforms) system_info: # This will affect which distro class gets used distro: amazon distro_short: amzn # Default user name + that default users groups (if added/used) default_user: name: ec2-user lock_passwd: true gecos: EC2 Default User groups: [ wheel ] sudo: [ "ALL=(ALL) NOPASSWD:ALL" ] shell: /bin/bash # Other config here will be given to the distro class and/or path classes paths: cloud_dir: /var/lib/cloud/ templates_dir: /etc/cloud/templates/ upstart_dir: /etc/init/ package_mirrors: - arches: [ i386, x86_64 ] search: regional: - repo.%(ec2_region)s.%(services_domain)s - repo.%(ec2_region)s.amazonaws.com ssh_svcname: sshd # vim:syntax=yaml expandtab
- Amazon Linux - Amazon Elastic Compute Cloud#CloudInit
- Documentation — Cloud-Init 0.7.7 documentation
ユーザデータを利用した初期設定の自動化
Amazon LinuxであればEC2起動時にユーザデータからcloud-init対応のコマンドやスクリプトを簡単に実行することができます。ユーザデータを利用する為には、前項のcloud-initパッケージにて初期設定されていることが前提となりますので、他のディストリビューションをご利用の際にはご注意ください。やや古い情報も含まれてはいますが、下記記事もぜひご覧ください。
- Linux インスタンスでの起動時のコマンドの実行 - Amazon Elastic Compute Cloud
- Amazon EC2(Linux)システム管理で知らないとハマる5つの環境設定 | Developers.IO
- Amazon Linuxのcloud-init Tips集 | Developers.IO
- Amazon Linuxのcloud-initの動きについて調べてみた | Developers.IO
- Amazon Linuxのcloud-initの実行順番を確認する | Developers.IO
- CentOS 6 (HVM)にcloud-initを設定してAmazon Linuxぽくする | Developers.IO
プログラム可能なインフラ環境
AWS環境のほとんどの操作はAPIコールを通して行うことができます。インフラ構築の自動化もコードにすることで実現可能です。まずはAWS CLIやAWS Tools for Windows PowerShellあたりから試してみることをお勧めします。
- AWS コマンドラインインターフェイス
- AWS Tools for Windows PowerShell
- 【初心者向け】MacユーザがAWS CLIを最速で試す方法 | Developers.IO
- AWS Tools for Windows PowerShellを使ってみた | Developers.IO
- 色々な言語・環境(計8言語12種類)でAWSを触ってみた | Developers.IO
あわせて読みたい
今回は再入門ということで、かいつまんでのご紹介となりましたが、AWS EC2には他にも様々な機能とサービスが含まれていますので、挙げればキリが無いくらいです。下記資料も可能な限り目を通してみてください。
- AWS Black Belt Techシリーズ 2015 Amazon Elastic Block Store (EBS)
- EC2を利用する上で欠かせないEBSについて理解しておくことも、パフォーマンス管理やデータ保全をしていく上で非常に重要です
- AWS Black Belt Techシリーズ Amazon CloudWatch & Auto Scaling
- Auto ScalingもEC2サービスの一部として位置付けられています。負荷に合わせてEC2インスタンスを自動で増減させることが可能です。
- AWS Blackbelt 2015シリーズ Elastic Load Balancing
- WEB環境には欠かせないロードバランサ機能(Elastic Load Balancing)もEC2サービスの一部として利用可能です
- AWS 上でのデプロイメントと管理 | アマゾン ウェブ サービス(AWS 日本語)
- EC2構築を自動化したり、インフラをほぼ意識せずにアプリケーションを利用できるサービスも複数存在していますのでご確認ください。
- AWS Developer Forums: Amazon Elastic Compute Cloud (EC2)
- リリース頻度の高いAWSサービスですが、EC2の最新アップデート情報はこちらから確認しておきましょう。
さいごに
以上、AWS サービス別 再入門アドベントカレンダー 10日目のエントリ『Amazon EC2(Linux)』編でした。Amazon EC2はAWSの基本となるサービスですので、ほとんど触ったことがないという方は少ないかもわかりませんが、本記事が少しでも多くの方のお役に立てれば嬉しいです。
明日(12/11)は小山のAWS Directory Service編です。お楽しみに!